#pragma once

#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boostext/smart_ptr.hpp>




DEFINE_COM_PTR(IDXGIFactory);
DEFINE_COM_PTR(IDXGIAdapter);
DEFINE_COM_PTR(IDXGIOutput);
DEFINE_COM_PTR(IDXGISwapChain);

DEFINE_COM_PTR(ID3D11Device);
DEFINE_COM_PTR(ID3D11DeviceContext);
DEFINE_COM_PTR(ID3D11RenderTargetView);
DEFINE_COM_PTR(ID3D11DepthStencilView);
DEFINE_COM_PTR(ID3D11Resource);
DEFINE_COM_PTR(ID3D11Texture2D);
DEFINE_COM_PTR(ID3D11SamplerState);
DEFINE_COM_PTR(ID3D11BlendState);
DEFINE_COM_PTR(ID3D11RasterizerState);
DEFINE_COM_PTR(ID3D11Buffer);
DEFINE_COM_PTR(ID3D11InputLayout);
DEFINE_COM_PTR(ID3D11ShaderResourceView);

DEFINE_COM_PTR(ID3D10Blob);
DEFINE_COM_PTR(ID3D11VertexShader);
DEFINE_COM_PTR(ID3D11PixelShader);
DEFINE_COM_PTR(ID3D11DomainShader);
DEFINE_COM_PTR(ID3D11GeometryShader);
DEFINE_COM_PTR(ID3D11HullShader);
DEFINE_COM_PTR(ID3D11ComputeShader);
DEFINE_COM_PTR(ID3D11ShaderReflection);

typedef boost::shared_array<D3D11_INPUT_ELEMENT_DESC>   D3D11_INPUT_ELEMENT_DESC_ARRAY;
